package com.lihao.wanandroid.data.api

import com.lihao.wanandroid.app.network.ApiResponse
import com.lihao.wanandroid.data.model.*
import retrofit2.http.*

/**
 * Created by lihao on 2020/5/15.
 * Describe:
 */
interface ApiService {

    companion object {
        const val SERVER_URL = "https://wanandroid.com/"
    }


    /**
     * 登陆
     */
    @FormUrlEncoded
    @POST("user/login")
    suspend fun login(
        @Field("username") username: String,
        @Field("password") password: String
    ): ApiResponse<UserInfoResponse>

    /**
     * 注册
     */
    @FormUrlEncoded
    @POST("user/register")
    suspend fun register(
        @Field("username") username: String,
        @Field("password") password: String,
        @Field("repassword") repassword: String
    ): ApiResponse<Any>

    /**
     * 登出
     */
    @GET("user/logout/json")
    suspend fun logout(): ApiResponse<Any>

    /**
     * 获取文章列表
     */
    @GET("article/list/{page}/json")
    suspend fun getArticleList(@Path("page") pageNo: Int): ApiResponse<BasePageResponse<ArticleResponse>>

    /**
     * 置顶文章
     */
    @GET("article/top/json")
    suspend fun getTopArticleList(): ApiResponse<ArrayList<ArticleResponse>>

    /**
     * 获取首页banner
     */
    @GET("banner/json")
    suspend fun getBanner(): ApiResponse<ArrayList<BannerResponse>>

    /**
     *  广场列表数据
     */
    @GET("user_article/list/{page}/json")
    suspend fun getPlazaList(@Path("page") pageNo: Int): ApiResponse<BasePageResponse<ArticleResponse>>

    /**
     * 公众号列表
     */
    @GET("wxarticle/chapters/json")
    suspend fun getPublicAccount(): ApiResponse<ArrayList<PublicAccTitleResponse>>

    /**
     * 公众号历史数据
     */
    @GET("wxarticle/list/{account}/{page}/json")
    suspend fun getPublicData(
        @Path("account") account: String,
        @Path("page") pageNo: Int
    ): ApiResponse<BasePageResponse<ArticleResponse>>

    /**
     * 最新项目列表
     */
    @GET("article/listproject/{page}/json")
    suspend fun getNewProjectList(
        @Path("page") page: Int
    ): ApiResponse<BasePageResponse<ArticleResponse>>

    /**
     * 获取导航数据
     */
    @GET("navi/json")
    suspend fun getNaviData(): ApiResponse<ArrayList<NavigationResponse>>

    /**
     * 收藏站内文章
     */
    @POST("lg/collect/{id}/json")
    suspend fun collectArticleIn(@Path("id") id: Int): ApiResponse<Any?>

    /**
     * 收藏站外文章
     */
    @FormUrlEncoded
    @POST("lg/collect/add/json")
    suspend fun collectArticleOut(
        @Field("title") title: String,
        @Field("author") author: String,
        @Field("link") link: String
    ): ApiResponse<Any?>

    /**
     * 取消收藏文章
     */
    @POST("lg/uncollect_originId/{id}/json")
    suspend fun uncollectArticle(@Path("id") id: Int): ApiResponse<Any?>

    /**
     * 收藏网址
     */
    @FormUrlEncoded
    @POST("lg/collect/addtool/json")
    suspend fun collectUrl(
        @Field("name") name: String,
        @Field("link") link: String
    ): ApiResponse<CollectUrlResponse>

    /**
     * 编辑收藏网站
     */
    @FormUrlEncoded
    @POST("lg/collect/updatetool/json")
    suspend fun editCollectUrl(
        @Field("id") id: Int,
        @Field("name") name: String,
        @Field("link") link: String
    ): ApiResponse<Any?>

    /**
     * 删除收藏网站
     */
    @FormUrlEncoded
    @POST("llg/collect/deletetool/json")
    suspend fun uncollectUrl(@Field("id") id: Int): ApiResponse<Any?>

    /**
     * 获取知识体系数据
     */
    @GET("tree/json")
    suspend fun getTree(): ApiResponse<ArrayList<TreeResponse>>

    /**
     * 获取体系下的文章
     */
    @GET("article/list/{pageNo}/json")
    suspend fun getTreeArticle(
        @Path("pageNo") pageNo: Int,
        @Query("cid") cid: Int
    ): ApiResponse<BasePageResponse<ArticleResponse>>

    /**
     * 按照作者昵称搜索文章
     */
    @GET("article/list/{pageNo}/json")
    suspend fun searchArticleByAuthor(
        @Path("pageNo") pageNo: Int,
        @Query("author") author: String
    ): ApiResponse<BasePageResponse<ArticleResponse>>

    /**
     * 项目分类
     */
    @GET("project/tree/json")
    suspend fun getProjectTree(): ApiResponse<ArrayList<ProjectTreeResponse>>

    /**
     * 项目列表数据
     */
    @GET("project/list/{pageNo}/json")
    suspend fun getProjectList(
        @Path("pageNo") pageNo: Int,
        @Query("cid") cid: Int
    ): ApiResponse<BasePageResponse<ArticleResponse>>
}